// 基于一个固定服务器。创建带有该服务器默认值和相关操作的axios副本

// 因为服务器可能不止只有一个，而服务器可能用多个axios来获取，所以可以通过axios.create来构建不同名的服务器的副本

import axios from 'axios'
import store from '@/store'
//因为main.js里的new Vue里没有继承api配置，所以要用element-ui的弹窗功能，得重新导包
import { Message } from 'element-ui'

const httpCodeMsg = {
    "404": "资源不存在",
    "500": "服务器运行异常"
}

let request = axios.create({
    baseURL: process.env.VUE_APP_AJAX_URL
})

request.interceptors.request.use(function (config) {
    // console.log("请求拦截器-拦截的请求配置：", config)

    // 排除不需要授权的请求地址
    if (!config.isPublic) {
        config.headers.Authorization = store.state.token;
    }
    // 不将config进行方法，axios请求将终止，不会发送
    return config;
},function(error){
    return Promise.reject(error)
})

request.interceptors.response.use(function (response) {
    //请求成功拦截的方法
    // console.log(response);
    let result = response.data;
    //根据状态码做提示，如果请求出错,则提示错误信息，并return error =>不做页面的跳转
    if (result.meta.status > 300) {
        Message.error(result.meta.msg);
        return "error";
    } else {
        // Message.success(result.meta.msg);
        return result.data;
    }
}, function (error) {
    console.log("request.js-error:", error);
    if (!(error instanceof Error)) {
        Message.error(error)
    } else if (!error.request) {
        Message.error("页面代码错误，请联系管理员")
    } else if (!error.response) {
        Message.error("请求超时")
    } else if (error.response == error.request) {
        Message.error("网络连接失败，请稍后重试")
    } else {
        Message.error(httpCodeMsg[error.response.status] || "运行错误")
    }
})

export default request;
